//
//  ViewController.m
//  iosjieba
//
//  Created by yanyiwu on 14/12/23.
//  Copyright (c) 2014年 yanyiwu. All rights reserved.
//

#import "ViewController.h"
#include "Segmentor.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    
#if 0
    CGRect bounds = self.view.bounds;
    
    // label
    
    UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 140, 40)];
    label.text = @"结巴中文分词";
    label.tag = 100;
    label.textAlignment = NSTextAlignmentCenter;
    
    label.center = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds) * 1 / 4);
    [self.view addSubview:label];
    
    
    
    CGRect textViewFrame = CGRectMake([UIScreen mainScreen].bounds.size.width / 2 - 150, 200.0f, 300.0f, 300.0f);
    UITextView *textView = [[UITextView alloc] initWithFrame:textViewFrame];
    textView.text = @"望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无";
//    textView.center = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds) * 1 / 2);
    textView.returnKeyType = UIReturnKeyDone;
    textView.backgroundColor = [UIColor whiteColor];
    textView.delegate = self;
    [self.view addSubview:textView];
    
    
    self.view.backgroundColor = [UIColor grayColor];
    
#endif
    NSString *dictPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"iosjieba.bundle/dict/jieba.dict.utf8"];
    NSString *hmmPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"iosjieba.bundle/dict/hmm_model.utf8"];
    NSString *userDictPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"iosjieba.bundle/dict/user.dict.utf8"];
    NSString *idfPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"iosjieba.bundle/dict/idf.utf8"];
    NSString *stopWordsPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"iosjieba.bundle/dict/stop_words.utf8"];
    
    NSLog(@"%@",dictPath);
    NSLog(@"%@",hmmPath);
    NSLog(@"%@",hmmPath);
    

    
    const char *cDictPath = [dictPath UTF8String];
    const char *cHmmPath = [hmmPath UTF8String];
    const char *cUserDictPath = [userDictPath UTF8String];
    const char *cIdfPath = [idfPath UTF8String];
    const char *cStopWordsPath = [stopWordsPath UTF8String];

    
//    JiebaInit(cDictPath, cHmmPath, cUserDictPath);
    JieBaInit(cDictPath, cHmmPath, cUserDictPath, cIdfPath, cStopWordsPath);
    
    
    long long startTime = [self getDateTimeToMillSeconds:[NSDate date]];
//    NSLog(@"开始时间===%lld", startTime);
    
//    NSString *text = @"望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无表情，唇角有着一抹自嘲，紧握的手掌，因为大力，而导致略微尖锐的指甲深深的刺进了掌心之中，带来一阵阵钻心的疼痛;望着测验魔石碑上面闪亮得甚至有些刺眼的五个大字，少年面无";
    NSString *text = @"超实用不踩雷‼️月嫂都夸的月子好物分享十月怀胎，一朝生产\n妈妈们坐月子一定不能亏待自己呀\n我现在剖腹产后20天了\n分享一些我觉得月子里不踩雷的好物们\n待产妈妈们可以来放心抄作业啦💪\n✨物苑哺乳枕\n月子期间使用频率zui高的母婴单品就是哺乳枕，新生儿每天2-3小时就需要喂一次奶，每天不是喂奶就是在喂奶的路上，躺喂麻烦，坐喂方便，但是时间久了真的很容易腰酸肩膀累，月嫂推荐我入了这个坐喂神器刷新我对喂奶认知，她说要从根本调整喂奶姿势，学会借力，才能让坐喂轻松的不止一点点，我有时候喂奶喜欢看看电视，不然好无聊，用了哺乳枕边喂奶边看电视，崽崽躺在怀里也很舒服，也不用担心他呛奶，月嫂阿姨都不用操心了～\n✨剖腹产防水伤口贴\n我剖腹产后第六天就洗头洗澡了，无法忍受自己的油头，拒绝脏月子！这个贴上伤口一点都不会进水，撕下来也很轻松，不会拉扯疼。\n✨一次性高腰内ku剖腹产妈妈不要囤一般的一次性内ku，会摩擦伤口！这种高腰的可以包住伤口，每天用了就丢，干净又卫生，纯棉的也透气，不用每天洗，懒人妈妈福音\n✨卷心菜乳\n产后第五天生理性涨奶，副乳也肿胀疼痛，把这个涂在副乳和ru房上，配合按mo手法，几次就疏通了，简直堵奶神器\n✨防溢乳垫\n月子期间涨奶溢奶，贴这个可以防止流到内衣睡衣上，保持🐻部干爽，防止滋生🦠\n✨双边电动吸奶器\n涨奶救星，我一般吸奶器先把前乳吸出来，冻冰箱，再让宝宝亲吸后乳（后乳脂肪含量更高）我们早产宝宝要快快长肉\n✨免手扶文胸👙\n搭配吸奶器，解放双手，我手扶着吸过一次，真的超累，有了这个文胸，半夜闭着眼睛吸奶都行，主要可以玩手机，看个时间都很方便\n✨ru头膏\n宝宝吸了容易皲裂，日常涂这个护理ru头，防止皲裂，质地很轻薄，不粘腻，我很喜欢它的唇膏式设计，直接涂就行，不用涂完到处找纸巾擦手了，非常方便\n✨收腹带+骨盆带\n剖腹产后下床神器，绑着会减轻疼痛感，月子期间我一般白天绑个两三个小时（不超过6小时）有利于伤口和骨盆恢复，晚上脱掉就行";
    
    //textView.backgroundColor = [UIColor whiteColor];
    const char* sentence = [text UTF8String];
    std::vector<std::string> words;
//    JiebaCut(sentence, words);
    JiebaCutOrigin(sentence, words);
    std::string result;
    result << words;
    NSLog(@"字数===%ld", text.length);
//    NSLog(@"分词结果===start");
    NSString *result_text = [NSString stringWithUTF8String:result.c_str()];
//    NSLog(@"%@", result_text);
//    NSLog(@"分词结果===end");
//    textView.text = [NSString stringWithUTF8String:result.c_str()] ;
    
    NSArray *lists = [result_text componentsSeparatedByString:@","];
    
    NSMutableArray *resultArray = [NSMutableArray array];
    for (NSString *text in lists) {
//        NSString *replace1 = [text stringByReplacingOccurrencesOfString:@"\"" withString:@"\'"];
        NSString *replace2 = [text stringByReplacingOccurrencesOfString:@"\n" withString:@""];
        if (replace2.length > 1) {
            [resultArray addObject:replace2];
        }
    }
//    NSLog(@"数组====%@", resultArray);
    NSString *result_str = [resultArray componentsJoinedByString:@","];
    NSLog(@"标签数量 === %ld", resultArray.count);
    NSLog(@"标签结果====%@", result_str);
    
    long long endTime = [self getDateTimeToMillSeconds:[NSDate date]];
//    NSLog(@"结束时间===%lld", endTime);
//    NSLog(@"计算耗时===%lldms", endTime - startTime);
    
}

- (NSString *)getTextContent
{
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"ChineseStopWords" ofType:@"txt"];
    NSString *text = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
    return text;
}

- (long long)getDateTimeToMillSeconds:(NSDate *)date
{
    NSTimeInterval interval = [date timeIntervalSince1970];
    long long totalMillSeconds = interval * 1000;
    
    return totalMillSeconds;
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"touchesBegan:withEvent:");
    [self.view endEditing:YES];
    [super touchesBegan:touches withEvent:event];
}

- (BOOL)becomeFirstResponder {
    return YES;
}

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView{
    NSLog(@"textViewShouldBeginEditing:");
    return YES;
}

- (void)textViewDidBeginEditing:(UITextView *)textView {
    NSLog(@"textViewDidBeginEditing:");
    //textView.backgroundColor = [UIColor greenColor];
}


- (BOOL)textViewShouldEndEditing:(UITextView *)textView{
    NSLog(@"textViewShouldEndEditing:");
    
    long long startTime = [self getDateTimeToMillSeconds:[NSDate date]];
    NSLog(@"开始时间===%lld", startTime);
    
    //textView.backgroundColor = [UIColor whiteColor];
    const char* sentence = [textView.text UTF8String];
    std::vector<std::string> words;
    JiebaCut(sentence, words);
    std::string result;
    result << words;
    textView.text = [NSString stringWithUTF8String:result.c_str()] ;
    
    
    long long endTime = [self getDateTimeToMillSeconds:[NSDate date]];
    NSLog(@"结束时间===%lld", endTime);
    NSLog(@"计算耗时===%lldms", endTime - startTime);
    
    return YES;
}

- (void)textViewDidEndEditing:(UITextView *)textView{
    NSLog(@"textViewDidEndEditing:");
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
    NSCharacterSet *doneButtonCharacterSet = [NSCharacterSet newlineCharacterSet];
    NSRange replacementTextRange = [text rangeOfCharacterFromSet:doneButtonCharacterSet];
    NSUInteger location = replacementTextRange.location;
    
    if (textView.text.length + text.length > 1400){
        if (location != NSNotFound){
            [textView resignFirstResponder];
        }
        return NO;
    }
    else if (location != NSNotFound){
        [textView resignFirstResponder];
        return NO;
    }
    return YES;
}

- (void)textViewDidChange:(UITextView *)textView{
    NSLog(@"textViewDidChange:");
}

- (void)textViewDidChangeSelection:(UITextView *)textView{
    NSLog(@"textViewDidChangeSelection:");
}

@end

